package com.hsp.Demo_11_innerclass;

public class Outter02 {

    //外部类的私有属性
    private int count = 1;

    //外部类的私有方法
    private void m1(){
        System.out.println("Outter02的m1()");
    }

    //再次定义一个外部类的方法，在该方法中添加一个内部类
    private void m2(){
        int size = 2;

        class Inner02{
            //内部类的公共成员变量
            public int innerSize = 3;
            //内部类的私有成员变量
            private int innerCount = 5;
            //一个和外部类的成员变量同名的内部类变量
            public int count = 6;

            //内部类的成员方法，将输出外部类的属性
            public void getOutter(){
                //输出外部类的私有变量：count  这个情况下，直接输出count，则是按照就近原则，其实访问的是
                //内部类Inner中的count
                System.out.println("内部类Inner02的count值：" + count);
                //那么如何访问外部类的成员
                System.out.println("外部类Outter02的count值：" + Outter02.this.count);
                //调用外部类的方法：m1()
                m1();
            }
        }

        //外部类调用局部内部类的方法：getOutter
        Inner02 inner02 = new Inner02();
        inner02.getOutter();

        //外部类还可以访问内部类的私有属性啊？
        System.out.println( "Inner02的私有属性innerCount：" + inner02.innerCount);
        System.out.println("Inner02的公共属性innerSize:" + inner02.innerSize);

        System.out.println("在外部类中访问内部类的count属性：" + inner02.count);
        System.out.println("在外部类中访问外部类的count属性：" + this.count);
    }

    public static void main(String[] args) {
        /*
            局部内部类的使用:
            下面代码打印结果：
                1、内部类Inner02的count值：6
                2、外部类Outter02的count值:1
                3、Outter的m1（）
                4、Inner02私有属性：5
                5、Inner02的公共属性：3
                6、在外部类中访问内部类的count属性：6
                7、在外部类中访问外部类的count属性：1

         */

        Outter02 outter02 = new Outter02();
        outter02.m2();

    }
}
